#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Swap(char* x, char* y, int size)      
{
	int i = 0;
	for (i = 0; i < size; i++)
	{
		char tem = *x;
		*x = *y;
		*y = tem;
		x++;
		y++;                            
	}                                          //逐字节交换
} 

void my_qsort(void* base,                      // 待排序数组的首地址
	int  nmemb,                                // 数组元素个数
	int  size,                                 // 每个元素的大小（字节）
	int(*compar)(const void*, const void*)     // 比较函数指针
)
{
	int i = 0;
	for (i = 0; i < nmemb - 1; i++)
	{
		int j = 0;
		int flag = 1;
		for (j = 0; j < nmemb - 1 - i; j++)
		{
			if (compar((char*)base + j * size, (char*)base + (j + 1) * size) > 0)
			{
				Swap((char*)base + j * size, (char*)base + (j + 1) * size, size);
				flag = 0;
		    }
		}
		if (flag)
			break;
	}
}

int  compar(const void* x, const void* y)
{
	return (*(int*)x - *(int*) y);
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int w= sizeof(arr[0]);
	my_qsort(arr, sz, w, compar);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d", arr[i]);
	}
	
	return 0;

}